package com.say.framework.core.util;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.Map;

/**
 * Map取值方法,其中取得多种值,避免null值转换
 *
 * @author Mount Liu
 * @date 2019/5/23
 */
public class MapGetterTool {

    private Map<String, Object> map;

    public MapGetterTool(Map<String, Object> map) {
        this.map = map;
    }

    /**
     * 根据Key返回一个Double型
     *
     * @param key
     * @return
     */
    public Double getDouble(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof Double) {
                return (Double) map.get(key);
            } else {
                return 0.0;
            }
        } else {
            return 0.00;
        }
    }

    /**
     * 根据Key返回一个Double型
     *
     * @param key
     * @return
     */
    public Long getLong(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof Long) {
                return (Long) map.get(key);
            } else {
                return 0L;
            }
        } else {
            return 0L;
        }
    }

    /**
     * 根据Key返回一个String
     *
     * @param key
     * @return String
     */
    public String getString(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof String) {
                return (String) map.get(key);
            } else {
                return null;
            }
        } else {
            return "";
        }
    }

    public String getStringNoNull(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof String) {
                String result = (String) map.get(key);
                return result != null ? result : "";
            } else {
                return "";
            }
        } else {
            return "";
        }
    }

    /**
     * 根据Key返回一个Date
     *
     * @param key
     * @return Date
     */
    public Date getDate(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof Date) {
                return (Date) map.get(key);
            } else {
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * 根据Key返回一个Integer
     *
     * @param key
     * @return Integer
     */
    public Integer getInteger(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof Integer) {
                return (Integer) map.get(key);
            } else if (map.get(key) instanceof BigInteger) {
                return ((BigInteger) map.get(key)).intValue();
            } else {
                return null;
            }
        } else {
            return 0;
        }
    }

    /**
     * 根据Key返回一个BigInteger
     *
     * @param key
     * @return BigInteger
     */
    public BigInteger getBigInteger(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof BigInteger) {
                return (BigInteger) map.get(key);
            } else {
                return null;
            }
        } else {
            return BigInteger.valueOf(0);
        }
    }

    /**
     * 根据一个Key返回一个Map<String,String>
     *
     * @param key
     * @return Map<String, String>
     */
    @SuppressWarnings("unchecked")
    public Map<String, String> getMap(String key) {
        if (map.get(key) != null) {
            if (map.get(key) instanceof Map) {
                return (Map<String, String>) map.get(key);
            } else {
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * 根据key返回BigDecimal
     * 如果为null,则返回 new BigDecimal(0)
     *
     * @param key
     * @return BigDecimal
     */
    public BigDecimal getBigDecimal(String key) {
        if (map.containsKey(key)) {
            if (map.get(key) instanceof BigDecimal) {
                return (BigDecimal) map.get(key);
            } else {
                return new BigDecimal(0);
            }
        } else {
            return new BigDecimal(0);
        }
    }

    /**
     * 获取布尔类型的值
     * @param key
     * @return
     */
    public Boolean getBoolean(String key) {
        if (map.containsKey(key)) {
            if (map.get(key) instanceof Boolean) {
                return (Boolean) map.get(key);
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

}
